/**
 * @fileoverview Giant Interective Group, Inc. Javascript Library v#version.
 * 该Javascript UI库是基于jQuery的扩展。
 * <pre>
 * Copyright (C) 2004-2009 Giant Interective Group, Inc. All rights reserved.
 * 版权所有 2004-2009 上海巨人网络科技有限公司
 * </pre>
 * @version #version, #date
 * @author  Zhangkai
 * Depend on jQuery 1.3.x
 */
if (typeof giant === 'undefined')
    var giant = window.giant = {};
if (typeof giant.ui === 'undefined')
    giant.ui = {};
(function($) {
    /**
     * 创建一个错误活警告tip提示实例
     * @class giant.ui.errortip 提示组件
     * @return {giant.ui.errortip}的一个实例
     * @example
     * <pre>
     *      var userNameTip = new giant.ui.errortip({
     *          tipType:"info",
     *          source:"#txtUserName",
     *          content:"用户名不得少于６个字符,不得大于１２个字符"
     *      });
     *      var userNameError = new giant.ui.errortip({
     *          source:"#txtUserName",
     *          content:"您输入的用户名少于了６个字符"
     *      });
     *      $("#txtUserName").focus(function() {
     *          if(!userNameError.isVisible()){
     *              userNameTip.show();
     *          }
     *      });
     *       $("#txtUserName").blur(function() {
     *           userNameTip.remove();
     *          if($(this).val().length<6){
     *              userNameError.show();
     *          }else if($(this).val().length>12){
     *              userNameError.setContent("您输入的用户名大于１２个字符");
     *               userNameError.show();
     *          }
     *          else{
     *               userNameError.hide();
     *          }
     *      });
     * //body
     *  &lt;input type=&quot;text&quot; value=&quot;&quot; id=&quot;txtUserName&quot; class=&quot;txt&quot;/&gt;
     * </pre>
     */
    giant.ui.errortip = function(options) {
        this.opts = $.extend({}, giant.ui.errortip.defaults, options);
        this.id = giant.ui.errortip.PREFIX + giant.ui.errortip.AUTO_ID;
        giant.ui.errortip.AUTO_ID++;
        giant.ui.errortip.instanceArr.push(this);
        this._getTemp();
    };
    giant.ui.errortip.PREFIX = 'ui-errortip-';    //默认的tipId 前缀
    giant.ui.errortip.AUTO_ID = 1000;           //tipId 生成页面唯一ID
    /**
     *静态属性，存放页面生命周期内生成的所有errortip示例，为数组形式
     */
    giant.ui.errortip.instanceArr = [];
    /**
     *静态方法，隐藏页面上所有的错误提示
     */
    giant.ui.errortip.hideAllTip = function() {
        $.each(giant.ui.errortip.instanceArr, function(i, n) {
            n.hide();
        });
    };
    /**
     *静态方法，移除页面上所有的错误提示的dom
     */
    giant.ui.errortip.removeAllTip = function() {
        $.each(giant.ui.errortip.instanceArr, function(i, n) {
            n.remove();
        });
    };
    giant.ui.errortip.prototype = {
        /**
         * 显示该tip
         */
        show:function() {
            $("#" + this.id).show("fast");
        },
        /**
         * 隐藏该tip
         */
        hide:function() {
            $("#" + this.id).hide("fast");
        },
        /**
         * 移除该tip的dom
         */
        remove:function() {
            $("#" + this.id).remove();
        },
        /**
         * 设置tip内的内容
         */
        setContent:function(str) {
            $("#" + this.id).find(".cont").html(str);
        },
        /**
         * 判断该tip是否在页面上可见，若可见，返回true,否则返回false
         */
        isVisible:function() {
            if ($("#" + this.id + ":visible").size() > 0) {
                return true;
            }
            return false;
        },
        _getTemp:function() {
            var arr = [];
            arr.push('<div class="tip errortip');
            if (this.opts.tipType == "error") {
                arr.push(' warning"');
            } else {
                arr.push(' host"');
            }
            arr.push(' id="' + this.id + '">');
            arr.push('<div class="cont">' + this.opts.content + '</div>');
            if (this.opts.direction == 'right') {
                arr.push('<div class="arrow_left"></div>');
            } else {
                arr.push('<div class="arrow_down"></div>');
            }
            arr.push("</div>");
            $("body").append(arr.join(''));
            var pos = this._calculatePosition();
            $("#" + this.id).css({"left":pos.x + "px","top":pos.y + "px","width":this.opts.width});
        },
        _calculatePosition:function() {
            var position = {x:0,y:0};
            if ($(this.opts.source).size() > 0) {
                if (this.opts.direction == "right") {
                    position.x = $(this.opts.source).offset().left + $(this.opts.source).outerWidth() + 10;
                    position.y = $(this.opts.source).offset().top;
                } else {
                    position.x = $(this.opts.source).offset().left;
                    position.y = $(this.opts.source).offset().top - $("#" + this.id).outerHeight() - 10;
                }
            }
            return position;
        }
    };
    /**
     * @default
     * <pre>
     * width==>errortip宽度,设为auto则宽度自适应<br />
     * direction==>tip相对与源显示的位置，有右侧和上面两种，默认为右侧"right"
     * tipType==>tip显示方式，有两种方式，一种为错误警告，一种为信息提示。默认为错误警告
     * source==>tip指向的dom源。
     * content==>tip中的内容。
     * </pre>
     */
    giant.ui.errortip.defaults = {
        width:"auto",
        direction:"right",
        tipType:"error",
        source:"input",
        content:""
    };
})(jQuery);